/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package petent;

import bazy.HibernateUtil;
import bazy.Zamowienia;
import formularze.Formularz;
import formularze.Zam_got;
import formularze.Zam_wew;
import formularze.Zgl_aw;
import java.util.List;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import logowanie.LogBean;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Komponent zarządzający do obsługi panelu petenta.
 * @author Grzesiek
 */
@Named(value = "kontrolerZamowien")
@RequestScoped
public class KontrolerZamowien {

    Session session = null;
    private final String zam_got_typ = "Zamowienie gotowkowe";
    private final String zam_wew_typ = "Zamowienie wewnetrzne";
    private final String zgl_aw_typ = "Zgloszenie awarii";
    private FacesContext context = FacesContext.getCurrentInstance();
    private LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
    private List<Zamowienia> lista_oczekujace = null;
    private List<Zamowienia> lista_realizowane = null;
    private Formularz form = null;
    private int id_zam = 0;
    private String akcja = null;
    private String typ = null;
    private String message = "";

    /** Creates a new instance of KontrolerZamowien */
    public KontrolerZamowien() {
    }

    public String getAkcja() {
        return akcja;
    }

    public void setAkcja(String akcja) {
        this.akcja = akcja;
    }

    public String getTyp() {
        return typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }

    public int getId_zam() {
        return id_zam;
    }

    public void setId_zam(int id_zam) {
        this.id_zam = id_zam;
    }

    public List<Zamowienia> getLista_oczekujace() {
        return lista_oczekujace;
    }

    public List<Zamowienia> getLista_realizowane() {
        return lista_realizowane;
    }

    /**
     * Wczytanie tabel, które następnie będą wyświetlone na stronie.
     */
    public void wczytajListy() {
        session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Query query = session.createQuery("from Zamowienia zam where zam.statusy.idstatusy =1 and zam.uzytkownicy.login like '" + bean.getLogin() + "' order by zam.datazlozeniawniosku desc");
        lista_oczekujace = (List<Zamowienia>) query.list();
        query = session.createQuery("from Zamowienia zam where zam.statusy.idstatusy !=1 and zam.uzytkownicy.login like '" + bean.getLogin() + "' order by zam.datazlozeniawniosku desc");
        lista_realizowane = (List<Zamowienia>) query.list();
        tx.commit();
    }

    /**
     * Zdecydowanie która strona ma być wyświetlona w zależności od typu
     * @param typ typ formularza
     * @return nazwa akcji nawigacji, która wyswietli odpowiedni formularz
     */
    public String wyswietl(String typ) {
        String wybor = "";
        if (typ.equals(zam_wew_typ)) {
            wybor = "gen_zap_wew";
        } else if (typ.equals(zam_got_typ)) {
            wybor = "gen_zap_got";
        } else if (typ.equals(zgl_aw_typ)) {
            wybor = "gen_zgl_aw";
        }

        return wybor;
    }

    /**
     * Funkcja zlecające usunięcie formularza z bazy
     * @param id id zamówienia
     * @param typ typ formularza
     */
    public void usun(int id, String typ) {
        if (typ.equals(zam_wew_typ)) {
            form = new Zam_wew();
        } else if (typ.equals(zam_got_typ)) {
            form = new Zam_got();
        } else if (typ.equals(zgl_aw_typ)) {
            form = new Zgl_aw();

        }
        form.usun(id);
        message = "ZADANIE ZOSTALO WYKONANE POPRAWNIE";

    }

    /**
     * Inicjalizacja strony, sprawdzenie uprawnień, oraz w przypadku wystąpienia parametrów widoku, odpowiednia ich obsługa.
     */
    public void inicjalizuj() {
        if (!bean.isLoggedin() || !bean.getUprawnienia().equals("petent")) {
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }
        if (akcja != null) {
            if (akcja.equals("confirm")) {
                zatwierdz(id_zam);
            } else if (akcja.equals("delete")) {
                usun(id_zam, typ);
            }
        }
        wczytajListy();
    }

    /**
     * Zamknięcie sesji do bazy.
     */
    public void zakoncz() {
        session.close();
    }

    public String getMessage() {
        return message;
    }

    /**
     * Zmiana statusu zamówienia na zatwierdzony.
     * @param id id zamówienia, którego status chcemy zmienić
     */
    public void zatwierdz(int id) {
        form = new Zgl_aw();
        form.zmien_status(id, 2, bean.getId_uz());
        message = "ZADANIE ZOSTALO WYKONANE POPRAWNIE";

    }
}
